// #include <iostream>
// #include <cstring>
// #include <set>
// #include <algorithm>
// using namespace std;

// #define MAX_N 30
// char map[MAX_N + 5][MAX_N + 5];
// bool isuse[MAX_N + 5][MAX_N + 5];
// set<std::pair<int, int>> distinct;
// int roads = 0, minlen = 0x3f3f3f3f;
// int n, m;
// int dx[4] = {1, -1, 0, 0};
// int dy[4] = {0, 0, 1, -1};

// void dfs(int x, int y, int len)
// {
//     if (map[x][y] == 'e')
//     {
//         if (!distinct.count({x, y}))
//         {
//             roads += 1;
//             // cout << "x: " << x << " y: " << y << endl;
//         }

//         distinct.insert({x, y});
//         minlen = min(len, minlen);
//         return;
//     }
//     isuse[x][y] = true;
//     for (int k = 0; k < 4; k++)
//     {
//         int nx = x + dx[k], ny = y + dy[k];
//         if (nx < 0 || nx >= n || ny < 0 || ny >= m)
//             continue;
//         if (isuse[nx][ny] == true || map[nx][ny] == '*')
//             continue;
//         dfs(nx, ny, len + 1);
//     }
//     isuse[x][y] = false;
// }

// int main()
// {
//     cin >> n >> m;
//     int x, y;
//     for (int i = 0; i < n; i++)
//     {
//         for (int j = 0; j < m; j++)
//         {
//             cin >> map[i][j];
//             if (map[i][j] == 'k')
//                 x = i, y = j;
//         }
//     }
//     memset(isuse, 0, sizeof isuse);
//     dfs(x, y, 0);
//     if (roads == 0)
//     {
//         cout << -1;
//     }
//     else
//     {
//         cout << roads << " " << minlen;
//     }
//     return 0;
// }

#include <bits/stdc++.h>
using namespace std;

static constexpr int MAX_N = 30;
char map_[MAX_N][MAX_N];
int dist[MAX_N][MAX_N]; // -1：未访问
array<int, 4> dx{1, -1, 0, 0};
array<int, 4> dy{0, 0, 1, -1};

int main()
{
    int n, m;
    cin >> n >> m;

    int sx = -1, sy = -1;
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < m; ++j)
        {
            cin >> map_[i][j];
            if (map_[i][j] == 'k')
                sx = i, sy = j;
        }
    }
    memset(dist, -1, sizeof dist);
    queue<pair<int, int>> q;
    dist[sx][sy] = 0;
    q.emplace(sx, sy);

    while (!q.empty())
    {
        auto [x, y] = q.front();
        q.pop();
        for (int d = 0; d < 4; ++d)
        {
            int nx = x + dx[d], ny = y + dy[d];
            if (nx < 0 || nx >= n || ny < 0 || ny >= m)
                continue;
            if (map_[nx][ny] == '*' || dist[nx][ny] != -1)
                continue;
            dist[nx][ny] = dist[x][y] + 1;
            q.emplace(nx, ny);
        }
    }
    int roads = 0;
    int minLen = INT_MAX;
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < m; ++j)
        {
            if (map_[i][j] == 'e' && dist[i][j] != -1)
            {
                cout << "i: " << i << " j: " << j << endl;
                ++roads;
                minLen = std::min(minLen, dist[i][j]);
            }
        }
    }

    if (roads == 0)
        cout << -1;
    else
        cout << roads << ' ' << minLen;
    return 0;
}